package com.skh.array;

/**
 * 总持续时间可被 60 整除的歌曲
 */
public class NumPairsDivisibleBy60 {
    /**
     * 在歌曲列表中，第 i 首歌曲的持续时间为 time[i] 秒。
     *
     * 返回其总持续时间（以秒为单位）可被 60 整除的歌曲对的数量。形式上，我们希望索引的数字  i < j 且有 (time[i] + time[j]) % 60 == 0。
     *
     *  
     *
     * 示例 1：
     *
     * 输入：[30,20,150,100,40]
     * 输出：3
     * 解释：这三对的总持续时间可被 60 整数：
     * (time[0] = 30, time[2] = 150): 总持续时间 180
     * (time[1] = 20, time[3] = 100): 总持续时间 120
     * (time[1] = 20, time[4] = 40): 总持续时间 60
     * 示例 2：
     *
     * 输入：[60,60,60]
     * 输出：3
     * 解释：所有三对的总持续时间都是 120，可以被 60 整数。
     *  
     *
     * 提示：
     *
     * 1 <= time.length <= 60000
     * 1 <= time[i] <= 500
     *
     */

    /**
     * 用一个数组记录每个时间对应的模60结果的总和，如果两个数的模相加为60，则这两个数相加是60的倍数
     * @param time
     * @return
     */
    public static int numPairsDivisibleBy60(int[] time) {
        int[] temp = new int[60];
        int count = 0;

        for (int i : time) {
            int t = i % 60;
            if (t == 0) {
                count += temp[t];
            } else {
                count += temp[60 - t];
            }
            temp[t]++;
        }
        return count;
    }

    public static void main(String[] args) {
        int[] time = {30, 150,30};
        int i = NumPairsDivisibleBy60.numPairsDivisibleBy60(time);
        System.out.println("i = " + i);
    }
}